//
//  DMLifecycleProtocols.h
//  DualMediationSDK
//
//  生命周期管理相关协议定义
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "DMLifecycleTypes.h"

NS_ASSUME_NONNULL_BEGIN

#pragma mark - 前向声明

@class DMLoginResponse;
@class DMUnAckOrderBean;
@class DMGameStrategy;
@class DMProductInfo;
@class DMPurchaseInfo;
@class DMFaceBookInfo;

#pragma mark - 生命周期事件监听器协议

/**
 * 生命周期事件监听器协议
 * 用于监听应用生命周期状态变化和事件
 */
@protocol DMLifecycleEventListener <NSObject>

@required
/**
 * 生命周期事件回调
 * @param event 生命周期事件类型
 * @param state 当前生命周期状态
 * @param userInfo 附加信息
 */
- (void)onLifecycleEvent:(DMLifecycleEvent)event state:(DMLifecycleState)state userInfo:(nullable NSDictionary *)userInfo;

@optional
/**
 * 生命周期状态变化回调
 * @param fromState 原状态
 * @param toState 新状态
 * @param userInfo 附加信息
 */
- (void)onLifecycleStateChanged:(DMLifecycleState)fromState toState:(DMLifecycleState)toState userInfo:(nullable NSDictionary *)userInfo;

/**
 * 生命周期状态变化回调（带触发事件）
 * @param previousState 原状态
 * @param currentState 当前状态
 * @param triggerEvent 触发事件
 */
- (void)onLifecycleStateChanged:(DMLifecycleState)previousState currentState:(DMLifecycleState)currentState triggerEvent:(DMLifecycleEvent)triggerEvent;

/**
 * 生命周期事件回调（带状态和用户信息）
 * @param event 生命周期事件
 * @param state 当前状态
 * @param userInfo 用户信息
 */
- (void)onLifecycleEvent:(DMLifecycleEvent)event withState:(DMLifecycleState)state userInfo:(nullable NSDictionary *)userInfo;

/**
 * 应用启动完成回调
 * @param userInfo 启动信息
 */
- (void)onApplicationDidFinishLaunching:(nullable NSDictionary *)userInfo;

/**
 * 应用变为活跃状态回调
 */
- (void)onApplicationDidBecomeActive;

/**
 * 应用将要失去活跃状态回调
 */
- (void)onApplicationWillResignActive;

/**
 * 应用进入后台回调
 */
- (void)onApplicationDidEnterBackground;

/**
 * 应用将要进入前台回调
 */
- (void)onApplicationWillEnterForeground;

/**
 * 应用将要终止回调
 */
- (void)onApplicationWillTerminate;

/**
 * 应用收到内存警告回调
 */
- (void)onApplicationDidReceiveMemoryWarning;

/**
 * 监听器优先级（数值越小优先级越高）
 * @return 优先级数值
 */
- (NSInteger)listenerPriority;

@end

#pragma mark - SDK生命周期回调代理协议

/**
 * SDK统一回调代理协议
 * 处理Facebook登录、产品、购买、分享等SDK回调
 */
@protocol DMSDKLifecycleDelegate <NSObject>

@optional

#pragma mark - Facebook登录回调

/**
 * Facebook登录成功回调
 * @param info Facebook用户信息
 */
- (void)dmSDKOnFbSuccess:(DMFaceBookInfo *)info;

/**
 * Facebook登录取消回调
 */
- (void)dmSDKOnFbCancel;

/**
 * Facebook登录错误回调
 * @param message 错误信息
 */
- (void)dmSDKOnFbError:(NSString *)message;

#pragma mark - 产品相关回调

/**
 * 产品列表获取回调
 * @param productList 产品列表
 */
- (void)dmSDKOnProductsFetched:(NSArray<DMProductInfo *> *)productList;

/**
 * 已购买产品列表获取回调
 * @param productType 产品类型
 * @param purchaseList 购买列表
 */
- (void)dmSDKOnPurchasedProductsFetched:(DMProductType)productType purchaseList:(NSArray<DMPurchaseInfo *> *)purchaseList;

/**
 * 购买失败回调
 * @param productId 产品ID
 * @param code 错误代码
 * @param type 类型
 * @param message 错误信息
 */
- (void)dmSDKOnPurchaseFail:(NSString *)productId code:(NSInteger)code type:(NSString *)type message:(NSString *)message;

/**
 * 购买成功回调
 * @param purchaseInfo 购买信息
 */
- (void)dmSDKOnPurchaseSuccess:(DMPurchaseInfo *)purchaseInfo;

#pragma mark - 评价相关回调

/**
 * 评价触发失败回调
 * @param message 错误信息
 */
- (void)dmSDKOnReviewTriggerFail:(NSString *)message;

#pragma mark - 分享回调

/**
 * 分享回调
 * @param success 是否成功
 * @param message 消息（可选）
 */
- (void)dmSDKOnShareCallBack:(BOOL)success message:(nullable NSString *)message;

#pragma mark - BMS配置回调

/**
 * BMS配置回调
 * @param success 是否成功
 * @param jsonString JSON字符串（可选）
 */
- (void)dmSDKOnBMSConfigCallBack:(BOOL)success jsonString:(nullable NSString *)jsonString;

#pragma mark - 推送消息回调

/**
 * 推送消息点击回调
 * @param messageId 消息ID
 */
- (void)dmSDKOnPushMessageClick:(NSString *)messageId;

@end

#pragma mark - Facebook回调代理协议

/**
 * Facebook回调代理协议
 * 专门处理Facebook相关的回调转发
 */
@protocol DMFacebookCallbackDelegate <NSObject>

@optional

#pragma mark - Facebook登录回调

/**
 * Facebook登录成功回调
 * @param userInfo 用户信息字典
 */
- (void)onFacebookLoginSuccess:(NSDictionary *)userInfo;

/**
 * Facebook登录失败回调
 * @param error 错误信息
 */
- (void)onFacebookLoginError:(NSError *)error;

/**
 * Facebook登录失败回调（兼容方法）
 * @param error 错误信息
 */
- (void)onFacebookLoginFailure:(NSError *)error;

/**
 * Facebook登录结果回调（兼容方法）
 * @param result 登录结果字典
 */
- (void)onFacebookLoginResult:(NSDictionary *)result;

/**
 * Facebook登录取消回调
 */
- (void)onFacebookLoginCancel;

#pragma mark - Facebook分享回调

/**
 * Facebook分享完成回调
 * @param success 分享是否成功
 * @param message 分享结果消息
 */
- (void)onFacebookShareComplete:(BOOL)success message:(nullable NSString *)message;

/**
 * Facebook分享成功回调
 * @param result 分享结果字典
 */
- (void)onFacebookShareSuccess:(NSDictionary *)result;

/**
 * Facebook分享失败回调
 * @param error 错误信息
 */
- (void)onFacebookShareFailure:(NSError *)error;

/**
 * Facebook分享取消回调
 */
- (void)onFacebookShareCancel;

#pragma mark - Facebook Graph API回调

/**
 * Facebook Graph API成功回调
 * @param result 结果字典
 * @param request 请求信息
 */
- (void)onFacebookGraphAPISuccess:(NSDictionary *)result request:(NSDictionary *)request;

/**
 * Facebook Graph API失败回调
 * @param error 错误信息
 * @param request 请求信息
 */
- (void)onFacebookGraphAPIFailure:(NSError *)error request:(NSDictionary *)request;

#pragma mark - Facebook应用事件回调

/**
 * Facebook应用事件记录回调
 * @param eventName 事件名称
 * @param parameters 事件参数
 * @param success 是否成功
 */
- (void)onFacebookAppEventLogged:(NSString *)eventName parameters:(NSDictionary *)parameters success:(BOOL)success;

#pragma mark - Facebook用户信息回调

/**
 * Facebook用户信息获取成功回调
 * @param userInfo 用户信息字典
 */
- (void)onFacebookUserInfoSuccess:(NSDictionary *)userInfo;

/**
 * Facebook用户信息获取失败回调
 * @param error 错误信息
 */
- (void)onFacebookUserInfoError:(NSError *)error;

@end

// DMAdDelegate 协议已在 AD/Common/DMAdDelegate.h 中定义，此处移除重复定义以避免冲突

#pragma mark - 生命周期扩展协议

/**
 * 生命周期扩展协议
 * 用于扩展生命周期管理功能
 */
@protocol DMLifecycleExtension <NSObject>

@required
/**
 * 扩展标识符
 * @return 唯一标识符
 */
- (NSString *)extensionIdentifier;

/**
 * 扩展初始化
 * @param manager 生命周期管理器实例
 */
- (void)setupWithLifecycleManager:(id)manager;

@optional
/**
 * 将要处理生命周期事件
 * @param event 生命周期事件
 */
- (void)willProcessLifecycleEvent:(DMLifecycleEvent)event;

/**
 * 已处理生命周期事件
 * @param event 生命周期事件
 */
- (void)didProcessLifecycleEvent:(DMLifecycleEvent)event;

/**
 * 扩展优先级
 * @return 优先级数值（数值越小优先级越高）
 */
- (NSInteger)extensionPriority;

@end

NS_ASSUME_NONNULL_END